/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package DAL;

import DTO.DTONguoiDung;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

/**
 *
 * @author Documents
 */
public class DALNguoiDung {
    ConnectionBD cnt;
    
    public DALNguoiDung(){
        cnt = new ConnectionBD();
    }
    
    public DTONguoiDung ktDangNhap(String tenDangnhap, String mk){
        try
        {
            //đầu tiên tạo kết nối với csdl
            cnt.getConnectionBD();
            
            DTONguoiDung dtoNgDung = null;
            String querySelect = "SELECT * FROM `nguoidung`   WHERE tendangnhap = ? AND matkhau = ?";
            PreparedStatement stmt = cnt.getCnt().prepareStatement(querySelect);
            stmt.setString(1, tenDangnhap);
            stmt.setString(2, mk);//chỗ này ko xài hàm getMD5 nếu trong csdl trường mật khẩu không phải là md5
            //nếu ko xài thì chỗ đó code sao a?//chỉ cần lấy tên và mật khẩu thôi, thực ra md5 chỉ đổi cái mật khẩu thành cái chuối khác rồi so sánh
            ResultSet rs = stmt.executeQuery();
            while(rs.next())
            {
                dtoNgDung = new DTONguoiDung(rs);
            }
            
            //sau khi thực hiện các truy vấn rồi thì đóng kết nối lại
            cnt.closeCnt();
            
            return dtoNgDung;
        }
        catch(SQLException ex){
            System.err.printf(ex.getMessage());
            return null;
        }
    }
    
    public boolean doiMatKhau(String tenDN, String mk, String mkMoi) throws Exception{
        try
        {
            DTONguoiDung NgDung = ktDangNhap(tenDN, mk);
            if(NgDung == null)
            {
                return false;
            }
            else
            {
                String qrUpdate = "update 'nguoidung' set matkhau = ? where tendangnhap = ?";
                PreparedStatement pre = cnt.getConnectionBD().prepareStatement(qrUpdate);
                pre.setString(1, cnt.getMD5(mkMoi));
                pre.setString(2, tenDN);
                return pre.executeUpdate() == 1;
            }
        }
        catch(SQLException ex)
        {
            System.err.printf(ex.getMessage());
            return false;
        }
    }
    
    public ArrayList<DTONguoiDung> dsNgDung(){
        try
        {
            ArrayList<DTONguoiDung> ds = new ArrayList<>();
            String qrSelect = "SELECT * FROM 'nguoidung'";
            ResultSet rs = cnt.executeQuery(qrSelect);
            while(rs.next())
            {
                ds.add(new DTONguoiDung(rs));
            }
            return ds;
        }
        catch(SQLException e)
        {
            System.err.printf(e.getMessage());
            return null;
        }
    }
    
    public boolean themNgDung(DTONguoiDung dtoNgDung) throws Exception{
        try
        {
            String qrInsert = "INSERT INTO 'nguoidung' (tendangnhap, matkhau, hoten, gioitinh, email, ngaytao) "
                    + "VALUES (?, ?, ?, ?, ?, ?)";
            SimpleDateFormat spdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
            String date = spdf.format(dtoNgDung.getNgayTao());
            PreparedStatement pre = cnt.getConnectionBD().prepareStatement(qrInsert);
            pre.setString(1, dtoNgDung.getTenDangNhap());
            pre.setString(2, cnt.getMD5(dtoNgDung.getMatKhau()));
            pre.setString(3, dtoNgDung.getHoTen());
            pre.setString(4, dtoNgDung.getGioiTinh());
            pre.setString(5, dtoNgDung.getEmail());
            pre.setString(6, date);
            return pre.executeUpdate() == 1;
        }
        catch(SQLException ex)
        {
            System.err.printf(ex.getMessage());
            return false;
        }
    }
    
    public boolean capNhatNgDung(DTONguoiDung dtoNgDung) throws Exception {
        try
        {
            String qrUpdate = "UPDATE 'nguoidung' SET tendangnhap = ?, matkhau = ?, hoten=?, gioitinh=?,"
                + " email=? WHERE id=? ";
            PreparedStatement pre = cnt.getConnectionBD().prepareStatement(qrUpdate);
            pre.setString(1, dtoNgDung.getTenDangNhap());
            pre.setString(2, cnt.getMD5(dtoNgDung.getMatKhau()));
            pre.setString(3, dtoNgDung.getHoTen());
            pre.setString(4, dtoNgDung.getGioiTinh());
            pre.setString(5, dtoNgDung.getEmail());
            pre.setInt(6, dtoNgDung.getID());
            return pre.executeUpdate() == 1;
        }
        catch(SQLException ex)
        {
            System.err.print(ex.getMessage());
            return false;
        }
    }
    
    public boolean xoaNguoiDung(int id)
    {
        try{
            String queryDel = "DELETE FROM `user` WHERE user_id = " + id;
            return cnt.exeUpdate(queryDel);
        }
        catch(Exception ex)
        {
            System.err.print(ex.getMessage());
            return false;
        }
    }

    public DTONguoiDung capNhatNgDung(int i) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}
